package org.akomantoso.core.io.util.group;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import org.akomantoso.core.data.DocCommittee;
import org.akomantoso.core.data.DocDate;
import org.akomantoso.core.data.DocIntroducer;
import org.akomantoso.core.data.DocNumber;
import org.akomantoso.core.data.DocProponent;
import org.akomantoso.core.data.DocTitle;
import org.akomantoso.core.data.DocType;
import org.akomantoso.core.data.DocketNumber;
import org.akomantoso.core.data.Legislature;
import org.akomantoso.core.data.Session;
import org.akomantoso.core.data.group.ANtitleInline;
import org.akomantoso.core.io.util.Instantiator;

public final class ANtitleInlineGroup {

	private ANtitleInlineGroup() {
	}

	public static final Map<String, Instantiator<ANtitleInline>> MAP;

	static {

		Map<String, Instantiator<ANtitleInline>> temp = new HashMap<String, Instantiator<ANtitleInline>>();

		// docIntroducer
		temp.put(DocIntroducer.ELEMENT, new Instantiator<ANtitleInline>() {
			public DocIntroducer instantiate() {
				return new DocIntroducer();
			}
		});

		// docNumber
		temp.put(DocNumber.ELEMENT, new Instantiator<ANtitleInline>() {
			public DocNumber instantiate() {
				return new DocNumber();
			}
		});

		// docTitle
		temp.put(DocTitle.ELEMENT, new Instantiator<ANtitleInline>() {
			public DocTitle instantiate() {
				return new DocTitle();
			}
		});

		// docType
		temp.put(DocType.ELEMENT, new Instantiator<ANtitleInline>() {
			public DocType instantiate() {
				return new DocType();
			}
		});

		// docCommittee
		temp.put(DocCommittee.ELEMENT, new Instantiator<ANtitleInline>() {
			public DocCommittee instantiate() {
				return new DocCommittee();
			}
		});

		// docDate
		temp.put(DocDate.ELEMENT, new Instantiator<ANtitleInline>() {
			public DocDate instantiate() {
				return new DocDate();
			}
		});

		// docProponent
		temp.put(DocProponent.ELEMENT, new Instantiator<ANtitleInline>() {
			public DocProponent instantiate() {
				return new DocProponent();
			}
		});

		// docketNumber
		temp.put(DocketNumber.ELEMENT, new Instantiator<ANtitleInline>() {
			public DocketNumber instantiate() {
				return new DocketNumber();
			}
		});

		// legislature
		temp.put(Legislature.ELEMENT, new Instantiator<ANtitleInline>() {
			public Legislature instantiate() {
				return new Legislature();
			}
		});

		// session
		temp.put(Session.ELEMENT, new Instantiator<ANtitleInline>() {
			public Session instantiate() {
				return new Session();
			}
		});

		MAP = Collections.unmodifiableMap(temp);

	}
}
